package com.kele.service;

import com.kele.domain.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author 赵奥林
 * @date 2021年05月10日 13:05
 * @Description
 */
public interface UserService {

    //查询所有用户
    List<User> findAll(@Param("pageNum") int pageNum, @Param("dataNums") int dataNums);

    //一、用户模块

    //用户注册
    int insertUser(User user);

    //用户登录
    User loginUser(String account,String password);

    //用户注销(不是退出登录，而是注销账号)
    void deleteAccount(Integer id,String password);

    //用户更改密码
    int updateUserPassword(Integer id,String newPassword);

    //根据用户id查询用户信息
    User queryUserById(Integer id);


    //通过用户名查询用户
    User queryByAccount(String account);

    //通过用户名查询密码
    String queryPasswordByAccount(String account);


    //用户修改信息(根据账户) 或者管理员修改用户资料（账号除外）
    int updateUser(User user);

    //二、管理员模块

    //判断用户名是否存在
    User checkAccount(String account);



    //管理员添加用户
    User addUser(User user);

    //管理员删除用户
    int deleteUser(Integer id);

    /**
     * 根据邮箱查询用户
     * @param email
     * @return
     */
    User queryUserByEmail(String email);

    /**
     * 根据邮箱修改密码
     * @param email
     * @return
     */
    Integer updatePasswordByEmail(String email,String password);

    /**
     * 关注-1
     * @param id
     * @return
     */
    int subFollow(int id);

    /**
     * 关注+1
     * @param id
     * @return
     */
    int addFollow(int id);

    /**
     * 粉丝+1
     * @param id
     * @return
     */
    int addFans(int id);

    /**
     * 粉丝-1
     * @param id
     * @return
     */
    int subFans(int id);

    /**
     * 查找该表中的所有数据
     * @param table 表名
     * @return 所有数据
     */
    int findAllSize(@Param("table") String table,@Param("flag") int flag);

    /**
     * 验证用户的昵称是否唯一
     * @param nickName 昵称
     * @return 返回 一个数字，如果《1则表示　不存在重复昵称
     */
    int checkNickName(String nickName);

    /**
     * 批量删除用户
     * @param ids
     * @return
     */
    int deleteList(Integer[] ids);

    /**
     * 完成支付后设置vip时长及更新状态
     * @param paytime
     * @param vip
     * @return
     */
    int setVip(@Param("id")Integer id,
               @Param("paytime")String paytime,
               @Param("vip")int vip);

    /**
     * 找出一个用户的所有关注的热恩
     * @param userid 用户的id
     * @return 返回一个集合，该集合包含着该用户的所有的关注对象
     */
    List<User> selectAllFollow(Integer userid);

    /**
     * 找到自己的所有粉丝
     * @param bloggerId 自己的id
     * @return 返回一个包含这所有粉丝的集合的列表
     */
    List<User> selectAllFollows(Integer bloggerId);


    /**
     * 后台管理用户模糊查询(根据属性)
     * @return
     */
    List<User> fuzzy(String attribute);
}
